--record IK ani v0.5
 rollout progress "working statistics" width:372 height:85
 (
 	progressBar pro "ProgressBar" pos:[4,26] width:362 height:9 color:(color 255 0 0) orient:#horizontal
 	label pro2 "" pos:[100,4] width:320 height:18
    progressBar pro3 "ProgressBar" pos:[4,62] width:362 height:9 color:(color 255 0 0) orient:#horizontal
    label pro4 "" pos:[100,40] width:280 height:18
 ) 
 
createdialog progress  
if ani_range[1] == ani_range[ani_range.count] then
 (
 )
else
 (
 animationRange = interval 0 ani_range[ani_range.count]
 )
slidertime=0
max unlink (parentobj)
global c=#()
v=0
v2=0
detectobj=#()
for i=1 to b.count do
 (
 at time 0(obj2=snapshot b[i];obj=snapshot b[i];obj.transform=b[i].transform;obj2.transform=b[i].transform;obj.parent = undefined;obj2.parent = undefined;obj.name="FK" + b[i].name;c[i]=obj;obj.pos.controller=tcb_position();obj.rotation.controller = tcb_rotation ())
 at time 0(objdummy=dummy();objdummy.pos=obj.pivot;objdummy.parent=b[i].parent)
 detectobj.count=0 
   
   
    v=v+1
	progress.pro.value=v*100./(b.count)
	pro2=(v*100./(b.count)) as integer			
	progress.pro2.text=b[i].name as string + " processing:" + pro2 as string + "%"
    printtemp = b[i].name as string + " processing....." 
	print printtemp
   
   	  ----------------------------------------------------
	  --auto detect step time code here: 
	  
	v2=0
	for itemp=1 to ani_range.count do
    (
    at time ani_range[itemp]
    (
    animate on
    
    (
    if b[i].parent == undefined or b[i].name == "Bip01 Pelvis" or b[i].name == parentobj.name then
	  (
	  obj2.transform = b[i].transform
	  )
	  else
	  (
	  obj2.transform = b[i].transform
	  obj2.rotation = obj2.rotation-objdummy.rotation
	  )
    )
    )
    
    v2=v2+1
	progress.pro3.value=v2*100./(ani_range.count)
	pro4=(v2*100./(ani_range.count)) as integer			
	progress.pro4.text="analyse preparation:" + pro4 as string + "%"
	
    )
	
	progress.pro3.value=0
	v2=0
	detectobj.count=0
	for frametemp=2 to ani_range.count-1 do
    (
	frame=ani_range[frametemp]
    
 
    
    
    at time (frame)(bdisx=obj2.rotation.x_rotation)
    at time (frame-1)(adisx=obj2.rotation.x_rotation)
    at time (frame+1)(cdisx=obj2.rotation.x_rotation)
    
    at time (frame)(bdisy=obj2.rotation.y_rotation)
    at time (frame-1)(adisy=obj2.rotation.y_rotation)
    at time (frame+1)(cdisy=obj2.rotation.y_rotation)
    
    at time (frame)(bdisz=obj2.rotation.z_rotation)
    at time (frame-1)(adisz=obj2.rotation.z_rotation)
    at time (frame+1)(cdisz=obj2.rotation.z_rotation)
    
    at time (frame)(bdis=obj2.pos)
    at time (frame-1)(adis=obj2.pos)
    at time (frame+1)(cdis=obj2.pos)
      
	at time frame
	 (  
      --slidertime=10*(floor (frame/10))
      if b[i].parent == undefined or b[i].name == "Bip01 Pelvis" or b[i].name == parentobj.name then
	  (
	  
	  ndisx=adisx-bdisx
      mdisx=bdisx-cdisx
      odisx=abs(ndisx+mdisx)
      odisx2=abs(ndisx-mdisx)
      
      ndisy=adisy-bdisy
      mdisy=bdisy-cdisy
      odisy=abs(ndisy+mdisy)
      odisy2=abs(ndisy-mdisy)
      
      ndisz=adisz-bdisz
      mdisz=bdisz-cdisz
      odisz=abs(ndisz+mdisz)
      odisz2=abs(ndisz-mdisz)
	  
	  ndis=distance adis bdis
      mdis=distance bdis cdis
      odis2=distance adis cdis
      odis=ndis+mdis
	  
	  detectrlt=0
	  for detectsn = 1 to framestep.count do
	  (
	   if framestep[detectsn] ==  frame then
	   (
	    detectrlt=1
	   )
	  )

	  
      if odisx2 > acurate_r or odisx >180 or odisy2 > acurate_r or odisy >180 or odisz2 > acurate_r or odisz > 180 or odis-odis2 > acurate_p/10*odis2 or abs(ndis-mdis)>acurate_p*odis2 or detectrlt == 1 then
      (
       join detectobj#(frame)
      )


	  )
	  else
	  (
	  
	  


      ndisx=adisx-bdisx
      mdisx=bdisx-cdisx
      odisx=abs(ndisx+mdisx)
      odisx2=abs(ndisx-mdisx)
      
      ndisy=adisy-bdisy
      mdisy=bdisy-cdisy
      odisy=abs(ndisy+mdisy)
      odisy2=abs(ndisy-mdisy)
      
      ndisz=adisz-bdisz
      mdisz=bdisz-cdisz
      odisz=abs(ndisz+mdisz)
      odisz2=abs(ndisz-mdisz)
	  
	  detectrlt=0
	  for detectsn = 1 to framestep.count do
	  (
	   if framestep[detectsn] ==  frame then
	   (
	    detectrlt=1
	   )
	  )
      

      if odisx2 > acurate_r or odisx >180 or odisy2 > acurate_r or odisy >180 or odisz2 > acurate_r or odisz >180 or detectrlt == 1 then
      (
       join detectobj#(frame)
      )
      
  
	  )

	  
	
	  v2=v2+1
	  progress.pro3.value=v2*100./(ani_range.count-2)
	  pro4=(v2*100./(ani_range.count-2)) as integer			
	  progress.pro4.text="animation analyzing:" + pro4 as string + "%"
	  
     )
    )
	
	if (numNoteTracks rootnode) == 1 then
	(
	 for keyani=1 to preani_range.count do
	 (
     join detectobj#(preani_range[keyani])
	 )
	)
	
	
	
	
	
    delete obj2
	  ----------------------------------------------------
   

   v2=0
   for frame=1 to detectobj.count by 1 do
    (
    --slidertime=10*(floor (frame/10))
	at time detectobj[frame]
	 (  
	  animate on
	  (
	  
	  
      if b[i].parent == undefined or b[i].name == "Bip01 Pelvis" or b[i].name == parentobj.name then
	  (
	  obj.transform = b[i].transform
	  )
	  else
	  (
	  obj.transform = b[i].transform
	  obj.rotation = obj.rotation-objdummy.rotation
	  )
	  )
	
	  v2=v2+1
	  progress.pro3.value=v2*100./(detectobj.count)
	  pro4=(v2*100./(detectobj.count)) as integer			
	  progress.pro4.text="animation recording:" + pro4 as string + "%"
	  
     )
    )
    
    
    
  if b[i].parent == undefined or b[i].name == "Bip01 Pelvis" or b[i].name == parentobj.name then
  (

  )
  else
  (
   
   deleteKeys obj.pos.controller
   at time 0(obj.transform = b[i].transform)
   
  )
  --move obj[100,100,0]
 )
 

 delete $Dummy*
 --progress.pro.value=0
 destroydialog progress